package com.amado.course34Thread;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by Administrator on 2018/7/18.
 */
public class S04SynchronizedMethodTest {
    static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    /**
     * 谁先进入谁就获得锁，执行完退出方法后JVM（JAVA虚拟机）会自动释放锁（锁类）
     * @param i
     */
    public static synchronized void test(int i) {
        System.out.println(Thread.currentThread().getName() +" "+ simpleDateFormat.format(new Date())+" " + i);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    /**
     * 当前类被锁后，其它有synchronized修饰的方法也不能进
     * @param i
     */
//    public static void test1(int i) {
    public static synchronized void test1(int i) {
        System.out.println(Thread.currentThread().getName() +" "+ simpleDateFormat.format(new Date())+" " + i);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Thread(() -> {
            for (int i = 0; i < 5; i++) {
            	//通过类调用静态方法的，所有锁的是类
            	//通过new 类得到对象的，包的是对象
            	//谁来调用锁谁？
                S04SynchronizedMethodTest.test(i);
            }
        }).start();
        new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                S04SynchronizedMethodTest.test1(i);
            }
        }).start();
    }
}
